问题发生
最近在准备将极光推送的SDK进行组件化管理的过程中,碰到了怎么都校验不通过的问题,一开始一直以为是我添加静态库的方式有问题吧,但事实上并没有,经过了多次修改之后,感到一丝灰心,报错信息如下:
The following build commands failed: Ld /Users/YanYi/Library/Developer/Xcode/DerivedData/App-dokqufshqekrqxajlpsxnsqnccom/Build/Intermediates.noindex/App.build/Release-iphonesimulator/App.build/Objects-normal/i386/App normal i386 (1 failure) Testing with `xcodebuild`. -> JPushApiManager (3.1.2) - ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code.
其中有两条提示如下:
- NOTE | [iOS] xcodebuild: ld: warning: ignoring file /Users/YanYi/Desktop/PublicPodsCode/JPushApiManager/libs/libjcore-ios-1.2.6.a, missing required architecture i386 in file /Users/YanYi/Desktop/PublicPodsCode/JPushApiManager/libs/libjcore-ios-1.2.6.a (4 slices)
- NOTE | [iOS] xcodebuild: ld: warning: ignoring file /Users/YanYi/Desktop/PublicPodsCode/JPushApiManager/libs/libjpush-ios-3.1.2.a, missing required architecture i386 in file /Users/YanYi/Desktop/PublicPodsCode/JPushApiManager/libs/libjpush-ios-3.1.2.a (4 slices)
顺着 missing required architecture i386 in file
的提示,可以大致知道该库在i386环境下校验不通过,到网上一找,崩溃。。。原来,你只要确定第三方库没问题,还有可以跳过相应平台校验这一说的:
那么照着来吧!
终端输入如下命令找到cocoapods的安装位置
$ gem which cocoapods
得到提示:
$ /usr/local/lib/ruby/gems/2.3.0/gems/cocoapods-1.5.3/lib/cocoapods.rb
进入到
/usr/local/lib/ruby/gems/2.3.0/gems/cocoapods-1.5.3/lib/
目录下找到并打开validator.rb
文件,找到如下代码:# @return [String] Executes xcodebuild in the current working directory and # returns its output (both STDOUT and STDERR). # def xcodebuild(action, scheme, configuration) require 'fourflusher' command = %W(clean #{action} -workspace #{File.join(validation_dir, 'App.xcworkspace')} -scheme #{scheme} -configuration #{configuration}) case consumer.platform_name when :osx, :macos command += %w(CODE_SIGN_IDENTITY=) when :ios command += %w(CODE_SIGN_IDENTITY=- -sdk iphonesimulator) command += Fourflusher::SimControl.new.destination(:oldest, 'iOS', deployment_target) # command += %w(--help) when :watchos command += %w(CODE_SIGN_IDENTITY=- -sdk watchsimulator) command += Fourflusher::SimControl.new.destination(:oldest, 'watchOS', deployment_target) when :tvos command += %w(CODE_SIGN_IDENTITY=- -sdk appletvsimulator) command += Fourflusher::SimControl.new.destination(:oldest, 'tvOS', deployment_target) end begin _xcodebuild(command, true) rescue => e message = 'Returned an unsuccessful exit code.' message += ' You can use `--verbose` for more information.' unless config.verbose? error('xcodebuild', message) e.message end end
将如下两行代码注掉
when :ios
command += %w(CODE_SIGN_IDENTITY=- -sdk iphonesimulator)
command += Fourflusher::SimControl.new.destination(:oldest, 'iOS', deployment_target)
改成如下代码即可:
command += %w(--help)
该做法直接跳过了iOS平台的校验,不会再出现报错,但相应的,你的代码如果真的有错误也不会提示,所以需要确保自己的代码没问题再来修改这个地方。